#include<stdio.h>
#include<string.h>

#define MAX_MODES 3 //三种出行模式
#define MAX_TRIPS 5 //5条出行记录

//定义出行模式的结构
typedef struct {
	char mode[20];
	int distance;//距离，Kiometer
	int time;//时间，minute
	int cost;//费用，￥rmb
} TravelOption;


//定义三种出行模式
TravelOption travelOptions[MAX_MODES] = {
	{"步行", 2, 20, 0},
	{"骑行", 5, 10, 2},
	{"驾车", 15, 5, 10},
};


//定义出行记录的结构
typedef struct {
	char mode[20];//出行模式
	int distance;//距离
	int time;//时间
	int cost;//费用
} TripRecord;//结构体名

//定义出行记录的数组
TripRecord tripHistory[MAX_TRIPS];
int tripCount = 0;


//定义显示出行方式的函数
void showoptions() {

	printf("\n出行模式列表:\n");
	for (int i = 0; i < MAX_MODES; i++) {
		printf("%d.%s(距离:%2d 公里, 时间:%2d 分钟, 费用:%2d 元)\n",
		       i + 1, travelOptions[i].mode, travelOptions[i].distance,
		       travelOptions[i].time, travelOptions[i].cost);
	}
}

//选择出行模式
void selectMode() {
	int choice;
	while (1) {
		showoptions();
		printf("\n请选择出行模式（输入编号，0返回主菜单）：");
		scanf("%d", &choice);

		if (choice == 0) {
			printf("返回主菜单。\n");
			break;
		}

		if (1 <= choice && choice <= MAX_TRIPS) {
			TravelOption selected = travelOptions[choice - 1];
			printf("\n你选择了%s模式。:\n", selected.mode);
			printf("详细:距离%2d 公里, 时间:%2d 分钟, 费用:%2d 元)\n",
			       selected.distance, selected.time, selected.cost);
			//保存出行记录
			if (tripCount < MAX_TRIPS) {
				tripHistory[tripCount].distance = selected.distance;
				tripHistory[tripCount].time = selected.time;
				tripHistory[tripCount].cost = selected.cost;
				//  tripHistory[tripCount].mode =selected.mode;
				strcpy(tripHistory[tripCount].mode, selected.mode);
				tripCount = tripCount + 1;
			} else {
				printf("历史记录已满，无法保存更多记录。\n");
			}
		} else {
			printf("无效输入，请重新输入[1~%d]", MAX_MODES);
		}
	}


}

//显示出行记录
void showTripHistory() {
	//count数据为0时，表示没有记录
	if (tripCount == 0) {
		printf("当前没有任何出行记录。\n");
		return; //返回
	}
	printf("\n出行历史记录：\n");
	for (
	    int i = 0; //①初始化，仅执行一次
	    i < tripCount; //②判断循环是否满足条件
	    i++) {  //④改变循环相关的变量——>②
		//③循环执行的代码（循环体）
		printf("%d.模式：%s（距离：%d公里，时间：%d分钟，费用：%d元)\n",
		       i + 1, tripHistory[i].mode, tripHistory[i].distance,
		       tripHistory[i].time, tripHistory[i].cost);
	}
}
//出行统计
void tripSum() {
	int totalDistance = 0;
	int totalTime = 0;
	int totalCost = 0;


	for (int i = 0; i <= tripCount; i++) {
		totalDistance = totalDistance + tripHistory[i].distance;
		totalTime = totalTime + tripHistory[i].time;
		totalCost = totalCost + tripHistory[i].cost;
	}


	
	
	printf("\n出行统计：\n");
	printf("总出行次数: %d次\n", tripCount);
	printf("总用时: %d分钟\n", totalTime);
	printf("总距离: %d公里\n", totalDistance);
	printf("总费用: %d元\n", totalCost);
}
//求1~5的整数和
//void sum(){
//	int sum;
//	sum =1+2+3+4+5;
//	for(int i=1;i<=5;i++){
//		sum =sum + i;
//	}
//	printf ("1~5之间的整数和：%d",sum);	
//}

//求1~10的偶数和
//void sum(){
//	int sum;
//	sum =2+4+6+8+10;
//	for(int i=2;i<=10;i++){
//		if(i%2==0){
			//TODO
//			sum =sum + i;
//		}
//	}
//	printf("偶数间的整数和：%d",sum);
//}
//求1~10的奇数和
//void sum(){
//	int sum;
//sum =1+3+5+7+9;
//for(int i=1;i<=9;i++){
//	if（i%2！=0）{
		//TODO
//		sum =sum + i;
//	}
//}
//}
int main() {
//showOptions();
//showStudents();
	//选择并记录出行模式
//	selectMode();
	//显示出行记录
	//showTripHistory();
//  float f =5.5f;
//	return 0;=
//	tripSum();
//	sum();
	
	while(1){
		printf("\n====智能出行助手====\n");
		printf("1.查看出行模式\n");
		printf("2.选择出行模式\n");
		printf("3.查看出行历史\n");
		printf("4.出行统计\n");
		printf("5.退出\n");
		printf("6.请选择操作:\n");
		
		int choice;
		scanf("%d",&choice);
		
		switch(choice) {
		case 1:
			showoptions();
			break;
		case 2:
			selectMode();
			break;
		case 3:
			showTripHistory();
			break;
		case 4:
			tripSum();
			break;
		case 5 :
			printf("感谢使用智能出行助手，观看了一个无聊的过程！\n");
			return 0;
		default:
			printf("无效选择，请重新输入[1~5]");
			break;
		
		}
    }
}
